#pragma once

#include "OriginPCH.h"
#include "Define.h"

namespace Origin
{
    class ORIGIN_API Input
    {
    public:
        inline static bool IsKeyPressed(int keyCode) { return _instance->IsKeyPressedImplement(keyCode); };
        inline static bool IsMouseButtonPressed(int button) { return _instance->IsMouseButtonPressedImplement(button); };
        inline static std::pair<float, float> GetMousePosition() { return _instance->GetMousePositionImplement(); };
        inline static float GetMouseX() { return _instance->GetMouseXImplement(); };
        inline static float GetMouseY() { return _instance->GetMouseYImplement(); };
    protected:
        virtual bool IsKeyPressedImplement(int keyCode) = 0;
        virtual bool IsMouseButtonPressedImplement(int button) = 0;
        virtual std::pair<float,float> GetMousePositionImplement() = 0;
        virtual float GetMouseXImplement() = 0;
        virtual float GetMouseYImplement() = 0;
    private:
        static Input* _instance;
    };
}